/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.tcr.main;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import com.tcr.entities.*;
import java.io.BufferedInputStream;
import java.net.URLConnection;
import java.util.ArrayList;
import java.io.InputStream;
import java.net.URL;
import java.util.HashMap;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.SimpleAdapter.ViewBinder;
import com.tcr.main.PatchInputStream;
import com.tcr.main.R;

/**
 *
 * @author V.D
 * 
 * Activity permettant l'affichage des favoris de l'utilisateur logge sur l'application
 * 
 */
public class Favoris extends Activity implements
        ViewBinder {

    private final String URLTCR = "http://10.0.2.2:8080/TheCityRater-war/resources/images/";
    private Client client;
    private Intent intent;
    private ArrayList<Enseigne> listeFavoris;
    private ListView listView;
    private Bitmap bitmap;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.favoris);

        // On recupere les infos stockés dans TheCityRater dont on a besoin
        // comme la, les informations sur le client
        client = (Client) getIntent().getExtras().get("User");
        listeFavoris = new ArrayList<Enseigne>();
        listeFavoris = (ArrayList<Enseigne>) client.getFavoris();

        //Récupération de la listview
        listView = (ListView) findViewById(R.id.listF);

        //Création de la ArrayList qui nous permettra de remplire la listView
        ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>();

        //On déclare la HashMap qui contiendra les informations pour un item
        HashMap<String, Object> map;
        
        // Si l'utilisateur a des favoris, on recupere les recupere
        // Sinon, on renvoit l'utilisateur sur l'activity Accueil
        if (listeFavoris.size() > 0) {
            for (int i = 0; i < listeFavoris.size(); i++) {
                map = new HashMap<String, Object>();
                map.put("titre", listeFavoris.get(i).getNom());
                map.put("description", listeFavoris.get(i).getDescription());


                bitmap = recupImage(listeFavoris.get(i).getImageProfil());
                if (bitmap != null) {
                    map.put("img", bitmap);
                }
                listItem.add(map);
            }
            SimpleAdapter adapter = new SimpleAdapter(this.getBaseContext(), listItem, R.layout.affichage_favoris,
                    new String[]{"img", "titre", "description"}, new int[]{R.afficherF.img, R.afficherF.titre, R.afficherF.description});

            adapter.setViewBinder(this);
            //On attribut à notre listView l'adapter que l'on vient de créer
            listView.setAdapter(adapter);
            //Enfin on met un écouteur d'évènement sur notre listView
            listView.setOnItemClickListener(new OnItemClickListener() {

                @Override
                @SuppressWarnings("unchecked")
                public void onItemClick(AdapterView<?> a, View v, int position, long id) {

                    Enseigne enseigne = listeFavoris.get(position);
                    Intent intent = new Intent(Favoris.this, DetailEnseigne.class);
                    intent.putExtra("User", client);
                    intent.putExtra("Enseigne", enseigne);

                    startActivity(intent);
                }
            });

        } else {
            AlertDialog.Builder adb = new AlertDialog.Builder(Favoris.this);
            //on attribut un titre à notre boite de dialogue
            adb.setTitle("Aucun favoris");
            //on insère un message à notre boite de dialogue, et ici on affiche le titre de l'item cliqué
            adb.setMessage("Vous n'avez aucun favoris");
            //on indique que l'on veut le bouton ok à notre boite de dialogue
            adb.setPositiveButton("Ok", null);
            //on affiche la boite de dialogue
            adb.show();
            intent = new Intent(Favoris.this, Accueil.class);
            intent.putExtra("User", client);
            startActivity(intent);
        }
    }

    /**
     *  Methode permettant de recuperer l'imageProfil d'une enseigne
     */
    public Bitmap recupImage(String url) {
        try {
            final String imageUrl = URLTCR.replaceAll(" ", "%20");
            URL aURL = new URL(imageUrl + url);
            URLConnection conn = aURL.openConnection();
            InputStream is = conn.getInputStream();
            Bitmap bit = null;
            BufferedInputStream bis = new BufferedInputStream(is);
            Bitmap bm = BitmapFactory.decodeStream(new PatchInputStream(bis));
            if (bm == null) {
                System.out.println("null");
            } else {
                System.out.println("good");
                return bit = Bitmap.createScaledBitmap(bm, 120, 120, true);

            }
            return null;
        } catch (Exception e) {
            System.err.print("bouh " + e.getLocalizedMessage());
            return null;
        }
    }

    public boolean setViewValue(View arg0, Object arg1, String arg2) {
        if ((arg0 instanceof ImageView) & (arg1 instanceof Bitmap)) {
            ImageView iv = (ImageView) arg0;
            Bitmap bm = (Bitmap) arg1;
            iv.setImageBitmap(bm);
            return true;
        }

        return false;
    }
}
